﻿using System.Collections.Generic;
using System.Windows.Media;
using System.ComponentModel;

namespace MSAP.Framework.Interfaces
{
    /// <summary>
    /// Un module represent un ensemble de service formant un tout homogene et automone.
    /// Un module contient : 
    /// * des services action qui permettent de d'executer des commandes
    /// * des worksplace qui sont des instances de service page.
    /// Typiquement un module correspond a une assembly (bien que rien n'oblige cette correspondance)
    /// </summary>
    public interface IModule : IRolesAccess, INotifyPropertyChanged
    {
        // Init du module avec son shell de rattachement
        void Init (IShell shell);
        
        // description du module
        IShell      Shell { get; }
        string      ID { get; }
        string      Title { get; }
        string      Comments { get; }
        ImageSource Icon { get; }

        // Actions possible sur le module
        List<IServiceAction> ServiceActions { get; }

        // Workplace actif sur le module
        List<IServicePage> ServicePages { get; }
        void AddServicePage(IServicePage service);
        void MoveToServicePage(IServicePage service);
        void RemoveServicePage(IServicePage service);
        bool CanRemoveServicePage(IServicePage service);
        void RemoveAllServicePage();
    }
}
